home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 7: Sunsite / Linux Cubed Series 7 - Sunsite Vol 1.iso / system / emulator / bsvc-1.000 / bsvc-1 / bsvc-1.0.4 / src / SimHector / cpu / RegisterSet.hxx < prev    next >
Text File  |  1995-07-26  |  2KB  |  82 lines

  1. ///////////////////////////////////////////////////////////////////////////////
  2. //
  3. // RegisterSet.hxx - The Hector 1600's Register Set
  4. //
  5. // By: Bradford W. Mott
  6. // December 3,1993
  7. //
  8. ///////////////////////////////////////////////////////////////////////////////
  9.  
  10. #ifndef REGISTERSET_HXX
  11. #define REGISTERSET_HXX
  12.  
  13. #include <assert.h>
  14.  
  15. // Register information structure
  16. struct RegisterData {
  17.   char* name;
  18.   char* description;
  19. };
  20.  
  21. // Indices into the register array
  22. const int SWI=11;
  23. const int NMI=12;
  24. const int MSK=13;
  25. const int SP=14;
  26. const int PC=15;
  27. const int T1=16;
  28. const int T2=17;
  29.  
  30. ///////////////////////////////////////////////////////////////////////////////
  31. // The Hector 1600's Register Set Class
  32. ///////////////////////////////////////////////////////////////////////////////
  33. class RegisterSet {
  34.   private:
  35.     // Number of user registers (User's view doesn't count T1 & T2)
  36.     const int number_of_user_registers;
  37.  
  38.     // Total number of registers
  39.     const int number_of_registers;
  40.  
  41.     // Array of static information for each user register
  42.     static RegisterData register_data[];
  43.  
  44.     // Pointer to an array of values for each register
  45.     unsigned long *register_value;
  46.  
  47.   public:
  48.     RegisterSet();
  49.     ~RegisterSet();
  50.  
  51.     // Return the Number Of User Registers
  52.     inline int NumberOfUserRegisters()
  53.     { return(number_of_user_registers); }
  54.  
  55.     // Return the Number Of Registers
  56.     inline int NumberOfRegisters()
  57.     { return(number_of_registers); }
  58.  
  59.     // Get a Register value from the register file
  60.     inline unsigned long GetRegister(int index)
  61.     {
  62.       assert(index < number_of_registers);
  63.       return(register_value[index]);
  64.     }
  65.  
  66.     // Store a value in one of the registers
  67.     inline void SetRegister(int index, unsigned long value)
  68.     {
  69.       assert(index < number_of_registers);
  70.       register_value[index]=value & 0xffff;
  71.     }
  72.  
  73.     // Get the RegisterData structure for the indexed registers
  74.     inline RegisterData GetRegisterData(int index)
  75.     {
  76.       assert(index < number_of_user_registers);
  77.       return(register_data[index]);
  78.     }
  79. };
  80. #endif
  81.  
  82.